Computing devices frequently receive and transmit data over a network. Personal computing devices, such as personal computers and laptops, may act as endpoints for data in the network. Other devices, such as routers, firewalls, and other network devices, may send and receive data to enable the network.
Data units, such as packets, may be transmitted between computing devices in the network. Generally, a network interface card (NIC) may include a hardware device that handles an interface to the network. The NIC allows the computing device to access the network. NICs may process data at the physical layer and the data link layer. An Ethernet NIC, for instance, may include logic that allows the NIC to communicate with a physical layer and data link layer standard for Ethernet. Although a NIC is called a “card”, a NIC can include logic that is, for example, embedded within a main computing board of a computing device, and thus does not necessarily need to be implemented on a separate physical card.
NICs may use a number of different techniques to transfer data to a host device. One such technique includes polling-based data transfer, in which the host device (e.g., a software device), at time intervals determined by the host device, examines the status of the NIC to determine if data units are available at the NIC. Another possible technique includes an interrupt-driven technique, in which the NIC alerts the host device when a data unit is ready to be transmitted to the host device. Polling-based data transfer techniques can be particularly effective for high bandwidth applications, as the host device may only poll the NIC when it is ready to process data. Interrupt driven techniques, however, can provide lower latency and/or lower host overhead for the delivery of data.
In some existing NIC/host device interfaces, the host may, through operation of a software driver, switch between polling and interrupt modes. The NIC may be initially placed in interrupt mode but may be placed in polling mode, by the host device, when the host device detects a high interrupt arrival rate. Such a system can require relatively high software overhead at the host device.